home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / LINUX / IGMP.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  3KB  |  130 lines

  1. /*
  2.  *    Linux NET3:    Internet Group Management Protocol  [IGMP]
  3.  *
  4.  *    Authors:
  5.  *        Alan Cox <Alan.Cox@linux.org>
  6.  *
  7.  *    Extended to talk the BSD extended IGMP protocol of mrouted 3.6
  8.  *
  9.  *
  10.  *    This program is free software; you can redistribute it and/or
  11.  *    modify it under the terms of the GNU General Public License
  12.  *    as published by the Free Software Foundation; either version
  13.  *    2 of the License, or (at your option) any later version.
  14.  */
  15.  
  16. #ifndef _LINUX_IGMP_H
  17. #define _LINUX_IGMP_H
  18.  
  19. /*
  20.  *    IGMP protocol structures
  21.  */
  22.  
  23. /*
  24.  *    Header in on cable format
  25.  */
  26.  
  27. struct igmphdr
  28. {
  29.     __u8 type;
  30.     __u8 code;        /* For newer IGMP */
  31.     __u16 csum;
  32.     __u32 group;
  33. };
  34.  
  35. #define IGMP_HOST_MEMBERSHIP_QUERY    0x11    /* From RFC1112 */
  36. #define IGMP_HOST_MEMBERSHIP_REPORT    0x12    /* Ditto */
  37. #define IGMP_DVMRP            0x13    /* DVMRP routing */
  38. #define IGMP_PIM            0x14    /* PIM routing */
  39. #define IGMP_TRACE            0x15
  40. #define IGMP_HOST_NEW_MEMBERSHIP_REPORT 0x16    /* New version of 0x11 */
  41. #define IGMP_HOST_LEAVE_MESSAGE     0x17
  42.  
  43. #define IGMP_MTRACE_RESP        0x1e
  44. #define IGMP_MTRACE            0x1f
  45.  
  46.  
  47. /*
  48.  *    Use the BSD names for these for compatibility
  49.  */
  50.  
  51. #define IGMP_DELAYING_MEMBER        0x01
  52. #define IGMP_IDLE_MEMBER        0x02
  53. #define IGMP_LAZY_MEMBER        0x03
  54. #define IGMP_SLEEPING_MEMBER        0x04
  55. #define IGMP_AWAKENING_MEMBER        0x05
  56.  
  57. #define IGMP_MINLEN            8
  58.  
  59. #define IGMP_MAX_HOST_REPORT_DELAY    10    /* max delay for response to */
  60.                         /* query (in seconds)    */
  61.  
  62. #define IGMP_TIMER_SCALE        10    /* denotes that the igmphdr->timer field */
  63.                         /* specifies time in 10th of seconds     */
  64.  
  65. #define IGMP_AGE_THRESHOLD        400    /* If this host don't hear any IGMP V1    */
  66.                         /* message in this period of time,    */
  67.                         /* revert to IGMP v2 router.        */
  68.  
  69. #define IGMP_ALL_HOSTS        htonl(0xE0000001L)
  70. #define IGMP_ALL_ROUTER     htonl(0xE0000002L)
  71. #define IGMP_LOCAL_GROUP    htonl(0xE0000000L)
  72. #define IGMP_LOCAL_GROUP_MASK    htonl(0xFFFFFF00L)
  73.  
  74. /*
  75.  * struct for keeping the multicast list in
  76.  */
  77.  
  78. #ifdef __KERNEL__
  79.  
  80. /* ip_mc_socklist is real list now. Speed is not argument;
  81.    this list never used in fast path code
  82.  */
  83.  
  84. struct ip_mc_socklist
  85. {
  86.     struct ip_mc_socklist    *next;
  87.     int            count;
  88.     struct ip_mreqn        multi;
  89. };
  90.  
  91. struct ip_mc_list
  92. {
  93.     struct in_device    *interface;
  94.     unsigned long        multiaddr;
  95.     struct ip_mc_list    *next;
  96.     struct timer_list    timer;
  97.     int            users;
  98.     char            tm_running;
  99.     char            reporter;
  100.     char            unsolicit_count;
  101.     char            loaded;
  102. };
  103.  
  104. extern __inline__ int ip_check_mc(struct device *dev, u32 mc_addr)
  105. {
  106.     struct in_device *in_dev = dev->ip_ptr;
  107.     struct ip_mc_list *im;
  108.  
  109.     if (in_dev) {
  110.         for (im=in_dev->mc_list; im; im=im->next)
  111.             if (im->multiaddr == mc_addr)
  112.                 return 1;
  113.     }
  114.     return 0;
  115. }
  116.  
  117. extern int igmp_rcv(struct sk_buff *, unsigned short);
  118. extern int ip_mc_join_group(struct sock *sk, struct ip_mreqn *imr);
  119. extern int ip_mc_leave_group(struct sock *sk, struct ip_mreqn *imr);
  120. extern void ip_mc_drop_socket(struct sock *sk);
  121. extern void ip_mr_init(void);
  122. extern void ip_mc_init_dev(struct in_device *);
  123. extern void ip_mc_destroy_dev(struct in_device *);
  124. extern void ip_mc_up(struct in_device *);
  125. extern void ip_mc_down(struct in_device *);
  126. extern int ip_mc_dec_group(struct in_device *in_dev, u32 addr);
  127. extern void ip_mc_inc_group(struct in_device *in_dev, u32 addr);
  128. #endif
  129. #endif
  130.